//package cm.lock.redis;
//
//import cm.lock.config.RedisClient;
//import org.springframework.beans.factory.annotation.Autowired;
//import redis.clients.jedis.Jedis;
//import redis.clients.jedis.JedisPool;
//import redis.clients.jedis.params.SetParams;
//
//import java.util.Collections;
//
//public class RedisLock {
//
//    private String LOCK_KEY = "redis_lock";
//
//    protected long INTERNAT_LOCK_LEASE_TIME = 3;
//
//    private long timeout = 1000;
//    // redis命令参数，相当于nx和px的命令合集
//    private SetParams params = SetParams.setParams().nx().px(INTERNAT_LOCK_LEASE_TIME);
//
//    Jedis jedis = new JedisPool("39.96.19.89", 6379).getResource();
//    @Autowired
//    RedisClient redisClient;
//    /**
//     * 加锁
//     *
//     * @param id
//     * @return
//     */
//    public boolean lock(String id) {
//        Long start = System.currentTimeMillis();
//        try {
//            for (; ; ) {
//                //SET命令返回OK ，则证明获取锁成功
//                String lock = redisClient.set(LOCK_KEY, id, params);
//                if ("OK".equals(lock)) {
//                    return true;
//                }
//                //否则循环等待，在timeout时间内仍未获取到锁，则获取失败
//                long l = System.currentTimeMillis() - start;
//                if (l >= timeout) {
//                    return false;
//                }
//                try {
//                    Thread.sleep(100);
//                } catch (InterruptedException e) {
//                    e.printStackTrace();
//                }
//            }
//        } finally {
////            redisClient.close();
//        }
//    }
//
//    /**
//     * 解锁
//     *
//     * @param id
//     * @return
//     */
//    public boolean unlock(String id) {
//        String script =
//                "if redis.call('get',KEYS[1]) == ARGV[1] then" +
//                        "   return redis.call('del',KEYS[1]) " +
//                        "else" +
//                        "   return 0 " +
//                        "end";
//        try {
//            redisClient.delete(id);
//        } finally {
////            jedis.close();
//        }
//    }
//}
